%load_ext autoreload
%autoreload 2
from src.domain import *
TOTAL = 1
large_us_stocks = {
"VTI": 0.8,
"VNQ (REIT)": 0.2
}
large_exus_stocks = {
"EAFE": 1
}
small_us_stocks = {
"Russell 2000": 1
}
small_exus_stocks = {
"EAFE Small-Cap": 1
}
bonds = {
"BND": 1,
}
fund_shares = [large_us_stocks, large_exus_stocks, small_us_stocks, small_exus_stocks, bonds]
categories = SharesCategoriesDistribution(
by_type=dict(zip((ShareType.Stock, ShareType.Bond), (0.75, 0.25))),
by_region=dict(zip((Region.US, Region.ExUS), (0.7, 0.3))),
by_cap=dict(zip((Cap.Large, Cap.Small), (0.8, 0.2))),
by_term=dict(zip((Term.Long, ), (1, ))),
)
distribution = SharesDistribution(
categories=categories,
funds=fund_shares
)
def assert_shares(obj):
assert(sum(obj.values()) == TOTAL)
for shares in [categories.by_cap, categories.by_region, categories.by_term, categories.by_type] + fund_shares:
assert_shares(shares)
###
flatten_stock_portfolio = []
stock_share = categories.by_type[ShareType.Stock]
for (region_key, region_value) in categories.by_region.items():
for (cap_key, cap_value) in categories.by_cap.items():
flatten_stock_portfolio.append({
"region": region_key.value,
"share": stock_share * region_value * cap_value,
"cap": cap_key.value
})
def sort_by_share(portfolio):
return sorted(portfolio, key=lambda x: x["share"], reverse=True)
flatten_stock_portfolio = sort_by_share(flatten_stock_portfolio)
from collections import OrderedDict
import pandas as pd
from IPython.display import display
from src.portfolio import prepare_stock_table_rows, get_stock_name
from src.display.portfolio import display_portfolio
from src.data.shares import SHARES_DATA
stocks_table = prepare_stock_table_rows(flatten_stock_portfolio)
df = pd.DataFrame(stocks_table, columns=['Share', 'Share of all'], index=[get_stock_name(x) for x in flatten_stock_portfolio])
display(df)
display_portfolio(distrib=distribution, extra_stocks=OrderedDict({"VTI": SHARES_DATA["VTI"], "BND": SHARES_DATA["BND"]}))
| Share | Share of all | |
|---|---|---|
| Us Large-cap stocks | 56.0% | 42.0% |
| Ex-us Large-cap stocks | 24.0% | 18.0% |
| Us Small-cap stocks | 14.0% | 10.5% |
| Ex-us Small-cap stocks | 6.0% | 4.5% |
| Portfolio | |
|---|---|
| VTI | 33.6% |
| VNQ (REIT) | 8.4% |
| EAFE | 18.0% |
| Russell 2000 | 10.5% |
| EAFE Small-Cap | 4.5% |
| BND | 25.0% |
| Mean ret. | Std | |
|---|---|---|
| Portfolio | 8.56% | 11.08% |
| VTI | 10.98% | 15.55% |
| BND | 6.72% | 5.3% |
from collections import OrderedDict
from src.display.portfolio import display_portfolio
from src.data.shares import SHARES_DATA
display_portfolio(SharesDistribution(funds=[OrderedDict({
"VTI": 0.2,
"GLD": 0.2,
"BND": 0.2,
"SHY": 0.2,
"Russell 2000": 0.2,
})]), extra_stocks=OrderedDict({"VTI": SHARES_DATA["VTI"], "BND": SHARES_DATA["BND"]}))
| Portfolio | |
|---|---|
| VTI | 20.0% |
| GLD | 20.0% |
| BND | 20.0% |
| SHY | 20.0% |
| Russell 2000 | 20.0% |
| Mean ret. | Std | |
|---|---|---|
| Portfolio | 7.55% | 7.51% |
| VTI | 10.98% | 15.55% |
| BND | 6.72% | 5.3% |
from collections import OrderedDict
from src.display.portfolio import display_portfolio
from src.data.shares import SHARES_DATA
display_portfolio(SharesDistribution(funds=[OrderedDict({
"VTI": 0.3,
"BND": 0.4,
"SHY": 0.15,
"GLD": 0.075,
"DBC": 0.075,
})]), extra_stocks=OrderedDict({"VTI": SHARES_DATA["VTI"], "BND": SHARES_DATA["BND"]}))
| Portfolio | |
|---|---|
| VTI | 30.0% |
| BND | 40.0% |
| SHY | 15.0% |
| GLD | 7.5% |
| DBC | 7.5% |
| Mean ret. | Std | |
|---|---|---|
| Portfolio | 6.84% | 6.35% |
| VTI | 10.98% | 15.55% |
| BND | 6.72% | 5.3% |